#ifndef MATRIX4F_H
#define MATRIX4F_H

#include "Vector.h"


class Matrix4f
{
public:
    // Inicia uma matrix identidade
    Matrix4f();

    Matrix4f(float data[4][4] );

    float& operator()(int i, int j);

    const float& operator()(int i, int j) const;

    Matrix4f operator*(const Matrix4f &mat) const;

    Vector3f operator*(const Vector3f &vec) const;

    Point3f operator*(const Point3f &vec) const;

    // Retorna a transporta da matriz
    Matrix4f transposed() const;

public:
    float m_data[16]; // column major order
};

#endif // MATRIX4F_H
